/*********************************************************************************
 *FileName:  main.c
 *Author: ChenJiehong
 *Version:  V1.0
 *Date: 2023-09-20
 ****************************************Includes***********************************/
#include "main.h"
/***************************************Variables***********************************/


/***************************************Functions***********************************/



void all_gpio_init(void)
{
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO, ENABLE);

    /* 除SWD接口以外的所有IO设置成输入 弱下拉*/
    for (uint8_t i = GPIO_PinSource0; i <= GPIO_PinSource5; i++)
    {
        GPIO_PinAFConfig(i, 0);
    }

    for (uint8_t i = GPIO_PinSource8; i <= GPIO_PinSource10; i++)
    {
        GPIO_PinAFConfig(i, 0);
    }

    GPIO_PuPdConfig(GPIO_Pin_0, GPIO_PuPd_DOWN);
    GPIO_PuPdConfig(GPIO_Pin_1, GPIO_PuPd_DOWN);
    GPIO_PuPdConfig(GPIO_Pin_2, GPIO_PuPd_DOWN);
    GPIO_PuPdConfig(GPIO_Pin_3, GPIO_PuPd_DOWN);
    GPIO_PuPdConfig(GPIO_Pin_4, GPIO_PuPd_DOWN);
    GPIO_PuPdConfig(GPIO_Pin_5, GPIO_PuPd_DOWN);
    GPIO_PuPdConfig(GPIO_Pin_8, GPIO_PuPd_DOWN);
    GPIO_PuPdConfig(GPIO_Pin_9, GPIO_PuPd_DOWN);
    GPIO_PuPdConfig(GPIO_Pin_10, GPIO_PuPd_DOWN);
}

/**
 * @brief main
 * @param None
 * @retval None
 */
void Sys_Init(void)
{
    SYSCTRL_Unlock();
    RCC_SystemClockControl(RCC_AHBPeriph_Clock, ENABLE);
    RCC_SystemClockControl(RCC_APBPeriph_Clock, ENABLE);

    /* 除SWD接口以外的所有IO设置成输入 弱下拉*/
    //all_gpio_init();
}

void uart_init(uint32_t baudrate)
{
	LINUART_InitTypeDef LINUART_InitType;
	
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO, ENABLE);
	RCC_APBPeriphClockCmd(RCC_APBPeriph_LINUART, ENABLE);
	RCC_APBPeriphClockCmd(RCC_APBPeriph_LINPORT, ENABLE);
	
	GPIO_PinAFConfig(GPIO_PinSource3, GPIO3_AF_UART_RX);
	GPIO_PinAFConfig(GPIO_PinSource4, GPIO4_AF_UART_TX);
	
    GPIO_PuPdConfig(GPIO_Pin_3, GPIO_PuPd_NOPULL);
    GPIO_PuPdConfig(GPIO_Pin_4, GPIO_PuPd_NOPULL);
	
	LINPORT->CR_b.LAIS = 1; /* 串口连接GPIO */

	LINUART_InitType.LINUART_TXRX = ENABLE;
	LINUART_InitType.LINUART_TXFifo = DISABLE;
	LINUART_InitType.LINUART_RXFifo = DISABLE;
	LINUART_InitType.LINUART_StopBits = LINUART_StopBits_1;
	LINUART_InitType.LINUART_Parity = LINUART_Parity_No; 
	LINUART_InitType.LINUART_AutoBaudRate = DISABLE;
	LINUART_InitType.LINUART_BaudRate = 32000000UL/baudrate;
	LINUART_InitType.LINUART_Mode = LINUART_Mode_Normal;

	//LINUART->CR_b.TXLOOPE = 0;
	LINUART_InitType.LINUART_TXFifoBits = 0;    
	LINUART_InitType.LINUART_RXFifoBits = 0;
	LINUART_Init(LINUART, &LINUART_InitType);
	
	LINUART_ITConfig(LINUART, LINUART_IT_RXC, ENABLE);
	LINUART_ClearITPendingBit(LINUART, LINUART_ISR_RXC);
	NVIC_EnableIRQ(LINUART_IRQn);
	
	LINUART_Cmd(LINUART, ENABLE);
}


/**
 * @brief main
 * @param None
 * @retval None
 */
int main(void)
{
    __disable_irq();
    Sys_Init();
	
	uart_init(115200);
    __enable_irq();

    while (1)
    {
		LINUART_SendData(LINUART, 0x55);
    }
}
uint8_t rx_data = 0;
void LINUART_IRQHandler(void)
{
	if(LINUART_GetITStatus(LINUART, LINUART_ISR_RXC) != RESET)
	{
		rx_data = (uint8_t)LINUART_ReceiveData(LINUART);
		LINUART_ClearITPendingBit(LINUART, LINUART_ISR_RXC);
	}
	
}


void SysTickHandler(void)
{

}

/***************************************END OF FILE*********************************/
